using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.IO;

namespace TestImport.PlatoBestellingen
{
    public partial class PlatoLeveringCreatie : Form
    {
        private List<int> bestelIDs = new List<int>();
        private DataView dv;
        private DataView dv1;
        //printen lijst
        private string lijst = "";
        private string totaalLijn = "";

        public PlatoLeveringCreatie()
        {
            InitializeComponent();
            this.BackColor = InstParameters.Default.schermkleur;
        }

        private void PlatoLeveringRegistratie_Load(object sender, EventArgs e)
        {
            //this.bestelling_BoekTableAdapter.Fill(this.onsBoekenPakketDataSet.Bestelling_Boek);
            this.bestellingTableAdapter.Fill(this.onsBoekenPakketDataSet.Bestelling);
            dv = bestellingBindingSource.List as DataView;
            dv1 = bestelling_BoekBindingSource.List as DataView;
            vulBestellijstCombobox();
            berekenAantallen();
            bestelling_BoekDataGridView.Focus();
        }

        private void vulBestellijstCombobox()
        {
            foreach (DataRowView drv in dv)
            {
                if (int.Parse(drv["status"].ToString()) < 2 && !bool.Parse(drv["isRetour"].ToString()) && !bool.Parse(drv["isAnnulatie"].ToString()))
                {
                    bestelIDs.Add(int.Parse(drv["bestellingID"].ToString()));
                    cmbBestellijst.Items.Add("(ID:" + drv["bestellingID"].ToString() + ") Besteldatum: " + drv["datumBestelling"].ToString().Substring(0,10));
                    cmbBestellijst.SelectedIndex = 0;
                }
            }
        }

        private void cmbBestellijst_SelectedIndexChanged(object sender, EventArgs e)
        {
            int vBesteldID = bestelIDs[cmbBestellijst.SelectedIndex];
            bestelling_BoekTableAdapter.FillByBestelID(this.onsBoekenPakketDataSet.Bestelling_Boek, vBesteldID);

            dv1 = bestelling_BoekBindingSource.List as DataView;
            int vbesteldPlatoAantal = 0;
            object obesteldPlatoAantal = null;
            int vretourPlatoAantal = 0;
            object oretourPlatoAantal = null;
            int vgeleverdAantal = 0;
            object ogeleverdAantal = null;
            int vboekID = 0;
            foreach (DataRowView drv in dv1)
            {
                vboekID = (int)drv["boekID"];
                //opzoeken Platobestellingen per boek
                try
                {
                    obesteldPlatoAantal = bestelling_BoekTableAdapter.GetBesteldBijPlatoAantal(vboekID);
                    if (obesteldPlatoAantal.Equals(DBNull.Value))
                        vbesteldPlatoAantal = 0;
                    else
                        vbesteldPlatoAantal = int.Parse(obesteldPlatoAantal.ToString());
                }
                catch (Exception ex) { vbesteldPlatoAantal = 0; }
                drv["bestelTotaal"] = vbesteldPlatoAantal;
                //opzoeken Platoretours per boek
                try
                {
                    oretourPlatoAantal = bestelling_BoekTableAdapter.GetRetourNaarPlatoAantal(vboekID);
                    if (oretourPlatoAantal.Equals(DBNull.Value))
                        vretourPlatoAantal = 0;
                    else
                        vretourPlatoAantal = int.Parse(oretourPlatoAantal.ToString());
                }
                catch (Exception ex) { vretourPlatoAantal = 0; }
                drv["retourTotaal"] = vretourPlatoAantal;

                //opzoeken leveringen per boek
                try
                {
                    ogeleverdAantal = bestelling_BoekTableAdapter.GetGeleverdAantal(vboekID);
                    if (ogeleverdAantal.Equals(DBNull.Value))
                        vgeleverdAantal = 0;
                    else
                        vgeleverdAantal = int.Parse(ogeleverdAantal.ToString());
                }
                catch (Exception ex) { vgeleverdAantal = 0; }
                drv["leverTotaal"] = vgeleverdAantal;
                drv.EndEdit();
                
            }
        }

        private void btnGeleverdIsBesteld_Click(object sender, EventArgs e)
        {
            DialogResult antwoord = MessageBox.Show("Wens je ALLE geleverde aantallen vervangen door de bestelde aantallen van de geselecteerde bonnen??", "OVERSCHRIJVEN GELEVERDE AANTALLEN", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (antwoord == DialogResult.Yes)
            {
                foreach (DataRowView drv in dv1)
                {
                    drv["aantalGeleverd"] = drv["aantalBesteld"];
                }
                bestelling_BoekBindingSource.EndEdit();
                berekenAantallen();
            }
        }

        private void berekenAantallen()
        {
            int aantalTitels = 0;
            int geleverd = 0;
            foreach (DataRowView drv in dv1)
            {
                if (int.Parse(drv["aantalGeleverd"].ToString()) > 0) aantalTitels++;
                try { geleverd += int.Parse(drv["aantalGeleverd"].ToString()); }
                catch (Exception ex) { ;}
            }
            lblAantalTitels.Text = "AANTAL GELEVERDE TITELS : " + aantalTitels.ToString().PadLeft(4);
            lblGeleverd.Text =  "AANTAL GELEVERDE BOEKEN : " + geleverd.ToString().PadLeft(4);
        }

        private void btnRegistreer_Click(object sender, EventArgs e)
        {
            lijst = "";
            int teller = 1;
            int aantal = 0;
            int totaalLevering = 0;
            bestelling_BoekBindingSource.EndEdit();
            foreach (DataRowView drv in dv1)
            {
               try
               {
                    aantal = int.Parse(drv["aantalGeleverd"].ToString());
                    if (aantal > 0)
                    {
                        lijst += teller.ToString().PadLeft(4) + ". " + drv["isbnNr"].ToString().PadRight(15) + drv["titel"].ToString().PadRight(55, '.') + drv["categorieCode"].ToString().PadRight(7, '.') + drv["uitgeverNaam"].ToString().PadRight(15, '.') + aantal.ToString().PadLeft(5) + Environment.NewLine;
                        teller++;
                        totaalLevering += aantal;
                    }
               }
               catch (Exception ex) { ;}
            }
            totaalLijn = "Aantal titels: " + (teller - 1) + "   " + "Aantal boeken: " + totaalLevering;
            PlatoLeveringRegistratie pl = new PlatoLeveringRegistratie(this, totaalLijn, lijst);
            pl.ShowDialog();
        }

        private void bestelling_BoekDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (bestelling_BoekDataGridView.CurrentCell.OwningColumn.Name.Equals("dgvGeleverd"))
                {
                    berekenAantallen();
                }
            }
            catch (Exception ex) { ;}
        }

        private void bestelling_BoekDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (bestelling_BoekDataGridView.Columns[e.ColumnIndex].Name == "dgvGeleverd")
            {
                int vbesteld = int.Parse(bestelling_BoekDataGridView.Rows[e.RowIndex].Cells["dgvBesteld"].Value.ToString());
                int vgeleverd = int.Parse(bestelling_BoekDataGridView.Rows[e.RowIndex].Cells["dgvGeleverd"].Value.ToString());
                int vsaldo = vbesteld - vgeleverd;
                if (e.Value != null)
                {
                    try
                    {
                        string stringValue = e.Value.ToString();
                        if (int.Parse(stringValue) != 0)
                        {
                            e.Value = stringValue;
                            e.FormattingApplied = true;
                            if (vsaldo < 0) e.CellStyle.ForeColor = Color.Red;
                            else e.CellStyle.ForeColor = Color.Black;
                        }
                    }
                    catch (Exception ex) { }
                }
            }
        }

        private void bestelling_BoekDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            //dummy
        }

        public void registreerLevering(DateTime leverDatum, string opmerkingIntern)
        {
            string bestandsNaam = @".\Leveringen\levering_" + leverDatum.Day + "_" + leverDatum.Month + "_" + leverDatum.Year + "_" + leverDatum.Hour + "_" + leverDatum.Minute;
            bool isPlato = true;
            int vstatus = 0;
            int aantal = 0;
            
            try
            {
                leveringTableAdapter.InsertLevering(leverDatum, isPlato, bestandsNaam, opmerkingIntern, vstatus);
                int leverID = (int)leveringTableAdapter.GetMaxLeveringID();
                foreach (DataRowView drv in dv1)
                {
                    aantal = int.Parse(drv["aantalGeleverd"].ToString());
                    try
                    {
                        if (aantal > 0)
                        {
                            leveringItemTableAdapter.InsertLeveringItem(leverID, int.Parse(drv["boekID"].ToString()), aantal, 0);
                        }
                    }
                    catch (Exception ex) { MessageBox.Show(ex.Message); }
                }

                string bestand = "Levering van Plato";
                bestand += "Leverdatum: " + leverDatum.Date.ToString().Substring(0, 10) + Environment.NewLine;
                bestand += totaalLijn + Environment.NewLine + Environment.NewLine;
                bestand += lijst;

                try
                {
                    FileStream aFile = new FileStream(bestandsNaam, FileMode.Create);
                    StreamWriter sw = new StreamWriter(aFile);
                    sw.Write(bestand);
                    sw.Flush();
                    sw.Close();

                }
                catch (IOException e)
                {
                    MessageBox.Show("Er is een probleem opgetreden bij het registreren van de bestellijst");
                    return;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            this.Close();
        }


       
    }
}